import sys
import os
import pandas as pd

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))

# 本地模块
from src.data_processing.data_import import DataImporter
from src.data_processing.data_preprocessing import DataPreprocessor
from src.config.constants import DEBUG_DIR

class PreprocessAndOutputTool:
    """数据预处理并输出工具"""
    
    def __init__(self):
        """初始化工具"""
        # 初始化数据导入器和预处理器
        self.data_importer = DataImporter()
        self.data_preprocessor = DataPreprocessor()
        
        # 确保调试目录存在
        os.makedirs(DEBUG_DIR, exist_ok=True)
    
    def run(self, task_file=None, history_file=None):
        """运行数据预处理并输出结果"""
        print("瀚越包装工具 - 数据预处理演示")
        print("=" * 50)
        
        # 1. 设置默认文件路径（如果未提供）
        if not task_file:
            task_file = os.path.join(
                os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
                ".trae", "rules", "瀚的发货用包装箱任务.xlsx"
            )
        
        if not history_file:
            history_file = os.path.join(
                os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
                ".trae", "rules", "瀚越已发货包装数据总表.xlsx"
            )
        
        print(f"使用的任务数据文件: {task_file}")
        print(f"使用的历史数据文件: {history_file}")
        print("=" * 50)
        
        try:
            # 2. 导入数据
            print("步骤1: 数据导入")
            task_data = self.data_importer.import_excel_file(task_file)
            history_data = self.data_importer.import_excel_file(history_file, is_historical=True)
            
            print(f"成功导入任务数据 {len(task_data)} 条")
            print(f"成功导入历史数据 {len(history_data)} 条")
            print("=" * 50)
            
            # 3. 数据预处理
            print("步骤2: 数据预处理")
            print("正在预处理任务数据...")
            # 预处理任务数据
            cleaned_task_data = self.data_preprocessor.clean_data(task_data)
            standardized_task_data = self.data_preprocessor.standardize_data(cleaned_task_data)
            processed_task_data = self.data_preprocessor.preprocess_task_data(standardized_task_data)
            
            print("正在预处理历史数据...")
            # 预处理历史数据
            cleaned_history_data = self.data_preprocessor.clean_data(history_data)
            standardized_history_data = self.data_preprocessor.standardize_data(cleaned_history_data)
            processed_history_data = self.data_preprocessor.preprocess_historical_data(standardized_history_data)
            
            print(f"预处理后保留任务数据 {len(processed_task_data)} 条")
            print(f"预处理后保留历史数据 {len(processed_history_data)} 条")
            print("=" * 50)
            
            # 4. 输出预处理结果
            print("步骤3: 输出预处理结果")
            
            # 输出任务数据前10行预览
            print("任务数据预处理结果预览（前10行）:")
            print(processed_task_data.head(10).to_string())
            print()
            
            # 输出历史数据前10行预览
            print("历史数据预处理结果预览（前10行）:")
            print(processed_history_data.head(10).to_string())
            print()
            
            # 保存预处理结果到文件
            task_output_file = os.path.join(DEBUG_DIR, "processed_task_data.xlsx")
            history_output_file = os.path.join(DEBUG_DIR, "processed_history_data.xlsx")
            
            # 使用pandas直接保存（简化版本）
            processed_task_data.to_excel(task_output_file, index=False)
            processed_history_data.to_excel(history_output_file, index=False)
            
            print(f"任务数据预处理结果已保存到: {task_output_file}")
            print(f"历史数据预处理结果已保存到: {history_output_file}")
            print("=" * 50)
            
            print("✅ 数据预处理并输出完成！")
            
        except Exception as e:
            print(f"❌ 处理过程中发生错误: {str(e)}")
            import traceback
            traceback.print_exc()

if __name__ == "__main__":
    # 创建并运行工具
    tool = PreprocessAndOutputTool()
    tool.run()